/**
* @author TDSoft
*
*
* La clase Usuario representa a los usuarios que puede utilizar el aplicativo
* Es una clase serializable
*
* @see GestorUsuario
*/

package edu.uoc.tds.pec4.model;

import java.io.Serializable;
import java.util.Date;

public class Usuario implements Serializable{
    
    /** Identificador universal para esta clase Serializable. */
    private static final long serialVersionUID = -51L;
     /** id del usuario. */
    private int id_usuario;
     /** id del tipo de usuario. */
    private int id_tipo_usuario;
    /** login del usuario. */
    private String usuario;
    /** clave del usuario. */
    private String clave;
    /** nombre del usuario. */
    private String nombre;
    /** apellido primero del usuario. */
    private String apellido_primero;
    /** apellido segundo del usuario. */
    private String apellido_segundo;
    /** documento del usuario. */
    private String documento;
    /** validación del usuario. */
    private boolean validado;
    /** fecha en la que ha sido dado de alta el usuario. */
    private Date fecha_alta;
    /** fecha en la que ha sido dado de baja el usuario. */
    private Date fecha_baja;

    /**
     * Constructor sin parámetros de la clase Usuario.
     * Crea una instancia de Usuario.
     * {pre: no hay parámetros}
     * {post: devuelve una instancia de la clase Usuario}
     */
    public Usuario(){
        this.id_usuario = 0;
        this.id_tipo_usuario = 0;
        this.usuario = null;
        this.clave = null;
        this.nombre = null;
        this.apellido_primero = null;
        this.apellido_segundo = null;
        this.documento = null;
        this.validado = false;
    }

    /**
     * Constructor con parámetros de la clase Usuario.
     * Crea una instancia de Usuario.
      * {pre: id_usuario es un entero distinto de cero
     *      usuario es una cadena que no puede ser vacía
     *      clave es una cadena que no puede ser vacía
     *      nombre es una cadena que no puede ser vacía
     *      apellido_primero es una cadena que no puede ser vacía
     *      apellido_segundo es una cadena que puede ser vacía 
     *      documento es una cadena que no puede ser vacía
     *      fecha_alta es una fecha que no puede ser vacía
     *      fecha_baja es una fecha que puede ser vacía }
     * {post: devuelve una instancia de la clase Usuario}
     * @param id_usuario representa el identificador para el usuario
     * @param usuario representa el nombre de conexión a la aplicación para el usuario
     * @param clave representa la clave de conexión a la aplicación para el usuario
     * @param nombre representa el nombre del usuario
     * @param apellido_primero representa el apellido primero del usuario
     * @param apellido_segundo representa el apellido segundo del usuario
     * @param documento representa el documento de identificación del usuario
     * @param fecha_alta representa la fecha de alta del usuario en el sistema
     * @param fecha_baja representa la fecha de baja del usuario en el sistema
     */
    public Usuario(int id_usuario, int id_tipo_usuario, String usuario, String clave, String nombre, String apellido_primero, String apellido_segundo, String documento, Date fecha_alta, Date fecha_baja){
        this.id_usuario = id_usuario;
        this.id_tipo_usuario = id_tipo_usuario;
        this.usuario = usuario;
        this.clave = clave;
        this.nombre = nombre;
        this.apellido_primero = apellido_primero;
        this.apellido_segundo = apellido_segundo;
        this.documento = documento;
        this.fecha_alta = fecha_alta;
        this.fecha_baja = fecha_baja;
        this.validado = true;
    }

    /**
     * Accesor de lectura del id de usuario 
     * {pre: x es una instancia de Usuario)
     * {post: devuelve el id del usuario}
     */
    public int getId_usuario(){
        return this.id_usuario;
    }

    /**
     * Accesor de escritura del id de usuario
     * {pre: x es una instancia de usuario}
     * {post: id_usuario asigna el identificador al usuario}
     */
    public void setId_usuario(int id_usuario){
        this.id_usuario = id_usuario;
    }

    /**
     * Accesor de lectura del id de tipo de usuario 
     * {pre: x es una instancia de Usuario)
     * {post: devuelve el id del tipo de usuario}
     */
    public int getId_tipo_usuario(){
        return this.id_tipo_usuario;
    }

    /**
     * Accesor de escritura del id del tipo de usuario
     * {pre: x es una instancia de usuario}
     * {post: id_usuario asigna el identificador de tipo de usuario al usuario}
     */
    public void setId_tipo_usuario(int id_tipo_usuario){
        this.id_tipo_usuario = id_tipo_usuario;
    }
    
    /**
     * Accesor de lectura del usuario con el que se logea el usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve el usuario con el que se logea el usuario instanciado}
     */
    public String getUsuario(){
        return this.usuario;
    }

    /**
     * Accesor de escritura del usuario con el que se logea el usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: usuario asigna al usuario instanciado el usuario con el que se logea por parámetro}
     */
    public void setUsuario(String usuario){
        this.usuario = usuario;
    }
    
    /**
     * Accesor de lectura de la clave con la que se logea el usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve la clave con la que se logea el usuario instanciado}
     */
    public String getClave(){
        return this.clave;
    }

    /**
     * Accesor de escritura de la clave con la que se logea el usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: clave asigna al usuario instanciado la clave con la que se logea por parámetro}
     */
    public void setClave(String clave){
        this.clave = clave;
    }
    
    /**
     * Accesor de lectura del nombre del usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve el nombre del usuario instanciado}
     */
    public String getNombre(){
        return this.nombre;
    }

    /**
     * Accesor de escritura del nombre del usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: nombre asigna al usuario instanciado el nombre pasado por parámetro}
     */
    public void setNombre(String nombre){
        this.nombre = nombre;
    }

    /**
     * Accesor de lectura del apellido primero del usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve el apellido primero del usuario instanciado}
     */
    public String getApellido_primero(){
        return this.apellido_primero;
    }

    /**
     * Accesor de escritura del apellido primero del usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: apellido_primero asigna al usuario instanciado el apellido primero pasado por parámetro}
     */
    public void setApellido_primero(String apellido_primero){
    	this.apellido_primero = apellido_primero;
    }

    /**
     * Accesor de lectura del apellido segundo del usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve el apellido segundo del usuario instanciado}
     */
    public String getApellido_segundo(){
        return this.apellido_segundo;
    }

    /**
     * Accesor de escritura del apellido segundo del usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: apellido_segundo asigna al usuario instanciado el apellido segundo pasado por parámetro}
     */
    public void setApellido_segundo(String apellido_segundo){
    	this.apellido_segundo = apellido_segundo;
    }
    
    /**
     * Accesor de lectura del documento del usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve el documento del usuario instanciado}
     */
    public String getDocumento(){
        return this.documento;
    }

    /**
     * Accesor de escritura del documento del usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: documento asigna al usuario instanciado el documento pasado por parámetro}
     */
    public void setDocumento(String documento){
    	this.documento = documento;
    }
    
    /**
     * Accesor de lectura de validacion del usuario instanciado
     * {pre: x es una instancia de estudiante
     * {post: devuelve el estado de la validacion del usuario instanciado}
     */
    public boolean getValidado() {
        return this.validado;
    }

    /**
     * Accesor de escritura del atributo validado del usuario instanciado
     * {pre: indicador del estado de validación del usuario
     *  es un booleano)}
     * {post: validado asignada al usuario instanciado}
     */
    public void setValidado(boolean validado) {
        this.validado = validado;
    }
    
    /**
     * Accesor de lectura de la fecha de alta del usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve la fecha de alta del usuario instanciado}
     */
    public Date getFecha_alta(){
        return this.fecha_alta;
    }

    /**
     * Accesor de escritura de la fecha de alta del usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: fecha_alta asigna al usuario instanciado la fecha de alta pasado por parámetro}
     */
    public void setFecha_alta(Date fecha_alta){
    	this.fecha_alta = fecha_alta;
    }
    
    /**
     * Accesor de lectura de la fecha de baja del usuario instanciado
     * {pre: x es una instancia de usuario
     * {post: devuelve la fecha de baja del usuario instanciado}
     */
    public Date getFecha_baja(){
        return this.fecha_baja;
    }

    /**
     * Accesor de escritura de la fecha de baja del usuario instanciado
     * {pre: x es una instancia de usuario}
     * {post: fecha_alta asigna al usuario instanciado la fecha de baja pasado por parámetro}
     */
    public void setFecha_baja(Date fecha_baja){
    	this.fecha_baja = fecha_baja;
    }
   
    /**
     * Sobreescribe el método toString de Object.
     * {pre: x es una instancia de usuario}
     * {post: retorna el nombre y los apellidos del usuario instanciado}
     */
    @Override
    public String toString() {
        String s = this.getNombre() + " " + this.getApellido_primero() + " " + this.getApellido_segundo();
        return s;
    }

    
}
